package com.weixing.mall.provider.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.weixing.mall.provider.model.domain.Order;
import com.weixing.mall.provider.model.vo.report.ActivityVo;
import com.weixing.mall.provider.model.vo.report.storage.*;

import java.util.List;

/**
 * @author jzy
 * @date 2020/6/5
 */
public interface IDayReportStorageService extends IService<Order> {


    /**
     * 02 仓储部--进出库存汇总表
     * @param shipper 发货员
     * @param yearMonth 年月 例：2020-06
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageInAndOutDepotSummaryVo> storageInAndOutDepotSummary(Long shipper,Long depotId,String yearMonth,String startTime,String endTime,String sortField,String sortType,Page page);
    /**
     * 02 仓储部--进出库存汇总表-进库明细
     * @param type 类型 1样衣 2大衣 3做货 4退货 5次品换货 6调拨 7盘点
     * @param shipper 发货员
     * @param yearMonth 年月 例：2020-06
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageInDepotDetailVo> storageInDepotDetail(Integer type,Long shipper,Long depotId,String yearMonth, String startTime,String endTime,String sortField,String sortType,Page page);
    /**
     * 02 仓储部--进出库存汇总表-出库明细
     * @param type 类型 1样衣 2大衣 3做货 4退货 5次品换货 6调拨 7盘点
     * @param shipper 发货员
     * @param yearMonth 年月 例：2020-06
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageOutDepotDetailVo> storageOutDepotDetail(Integer type,Long shipper,Long depotId,String yearMonth, String startTime,String endTime,String sortField,String sortType,Page page);
    /**
     * 03 仓储部--活动销售日报
     * @param yearMonth 年月 2016-06
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param actId 活动Id
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageActivitySalesVo> activitySalesReport(String yearMonth, String startTime, String endTime, Long actId,String sortField,String sortType,Page page);

    /**
     * 03 仓储部--活动销售日报-详细数据
     * @param type 类型 1-APP仓库销售数量 2-APP仓断货数量 3-APP仓取消数量 4-ERP仓销售数量 5-ERP仓断货数量
     * @param itemStatus 操作状态 1待定 2带货 3有现货 4需外采 5内部换货 6断货 7取消 8待处理 9退货
     * @param userName 用户名
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param actId 活动Id
     * @param depotCode 仓库code  APP（app仓库） ERP(ERP仓库) OUT(外采仓库) FHB（发货部仓库） CP(次品仓库)
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageActivitySalesDetailVo> activitySalesReportDetail(Integer type,Integer itemStatus, String userName, String startTime, String endTime, Long actId, String depotCode, String sortField, String sortType,Page page);

    /**
     * 04 仓储部--做货样衣报表
     * @param type 类型 1样衣 3做货
     * @param yearMonth 年月 例：2020-06
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageDoSampleVo> storageDoAndSample(Integer type,Long depotId,String yearMonth,String startTime,String endTime,String sortField,String sortType,Page page);
    /**
     * 05 仓储部-换货报表
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param role 角色 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param auditStartTime 审核开始时间
     * @param auditEndTime 审核结束时间
     * @param exchangeStartTime 换货开始时间
     * @param exchangeEndTime 换货结束时间
     * @param page
     * @return IPage
     */
    IPage<StorageExchangeReportVo> exchangeReport(Integer roleType, Long agentId, Integer role, String userName, String auditStartTime, String auditEndTime, String exchangeStartTime, String exchangeEndTime,Page page);

    /**
     * 05 仓储部-换货报表2
     * @return IPage
     */
    IPage<StorageExchangeReport2Vo> exchangeReport2(String orderSn,String userInfo,String agentName,String customerName,String goodsSn,String shipperName,Integer orderType,String actName,
                                                   Integer orderStatus,Integer sysTag,String auditStartTime,String auditEndTime,String receiveStartTime,String receiveEndTime,Page page);
    /**
     * 06 仓储部-退货报表
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param goodsSn 商品货号
     * @param userName 客户名称
     * @param orderType 订单类型  1正价订单 2代理商活动订单  3秒杀活动订单
     * @param actId 活动Id
     * @param catId 分类
     * @param buyer 下单人
     * @param orderSn 订单号
     * @param mobile 手机号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page
     * @return IPage
     */
    IPage<StorageRegularReturnVo> regularReturnReport(Integer roleType, Long agentId, String goodsSn, String userName,Integer orderType, Long actId,Long catId, String buyer,String orderSn, String mobile,  String startTime, String endTime,String receiveRemark,Page page);

    /**
     * 06-2 仓储部-退货报表
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param goodsSn 商品货号
     * @param userName 客户名称
     * @param orderType 订单类型  1正价订单 2代理商活动订单  3秒杀活动订单
     * @param actId 活动Id
     * @param catId 分类
     * @param buyer 下单人
     * @param orderSn 订单号
     * @param mobile 手机号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page
     * @return IPage
     */
    IPage<StorageRegularReturnVo> regularReturnReport2(Integer roleType, Long agentId, String goodsSn, String userName,Integer orderType, Long actId,Long catId, String buyer,String orderSn, String mobile,  String startTime, String endTime,String receiveRemark,Integer findState,Page page);

    /**
     * 07 仓储部-出入库报表
     * @param billType 出入库类型  1入库 2出库
     * @param catId 类型Id
     * @param goodsSn 货号
     * @param styleNo 款号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageOutAndInReportVo> outAndInReport(Integer billType,Long catId,String goodsSn,String styleNo,String startTime,String endTime, String sortField, String sortType,Page page);
    /**
     * 08 仓储部-次品报表
     * @param roleType  角色类型
     * @param agentId 代理商Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序  desc倒序
     * @param page
     * @return IPage
     */
    IPage<StorageDefectReportVo> defectReport(Integer roleType,Long customerId, Long agentId, String startTime, String endTime, String sortField, String sortType,Page page);

    /**
     * 08 仓储部-次品报表-详细数据
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param type 问题类型 1瑕疵 2问题订单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 分页
     * @return IPage
     */
    IPage<StorageDefectReportDetailVo> defectReportDetail(String orderSn,Long customerId,Integer roleType,Long agentId,Integer type,String startTime,String endTime,String agentName,String contactUser,String mobile,Page page);

    /**
     * 09 仓储部-库存截留报表
     * @param orderType 订单类型 1正价 2代理商活动 3秒杀活动
     * @param agentType 代理商等级（金银级）1金级 2银级
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序  desc倒序
     * @param page 分页
     * @return IPage
     */
    IPage<StorageInterceptVo> storageIntercept(Integer orderType, Integer agentType,Long actId,String startTime,String endTime,String sortField,String sortType,Page page);

    /**
     * 09 仓储部-库存截留报表-详细数据
     * @param customerId 客服id
     * @param orderType 订单类型 1正价 2代理商活动 3秒杀活动
     * @param agentType 代理商等级（金银级）1金级 2银级
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 分页
     * @return IPage
     */
    IPage<StorageInterceptDetailVo> storageInterceptDetail(Long customerId,Integer orderType,Integer agentType,String startTime,String endTime,Page page);

    /**
     * 获取所有的活动
     * @param type  1代理商活动 2秒杀活动
     * @return
     */
    List<ActivityVo> activityList(Integer type);
}
